/**
 *
 */
package com.dkm.orproject.utils.utils;

import net.coobird.thumbnailator.Thumbnails;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import redis.clients.jedis.Jedis;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 文件工具类
 * @author liandyao
 * @date 2017年10月12日 下午3:28:42
 * @version 1.0
 */
@Component
public class FileTools {

	static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");

	@Resource
	private Config config;
	/**
	 * 需要保存的文件地址和文件
	 * @param path 传入的地址名称,例如,会员模块,传入的地址是member,也可以是member/2017/这样的多重文件夹
	 * @param file
	 * @return  地址字符串,注意,如果返回的是空,则说明没有选择上传文件
	 * @throws IOException
	 * @throws IllegalStateException
	 */
	public String saveFile(String path, MultipartFile file) {
		//原文件名
		String oriFileName = file.getOriginalFilename();
		if(Tools.isEmpty(oriFileName)){
			return null ;
		}
		//得到后缀
		String hz = oriFileName.substring(oriFileName.lastIndexOf("."));
		//新文件名
		String newFileName = Tools.getTimeStamp()+"_"+Tools.getRandomString(8)+""+hz;
		//存储的目标地址
		String targetPath = config.getDir() ;
		//如果配置的文件为空
		if(Tools.isEmpty(targetPath)){
			return "未配置文件存储文件夹";
		}
		//加上月份
		path = path+"/"+sdf.format(new Date());
		File fileNew=new File(targetPath+"/"+path);
		if(!fileNew.exists()){
			//创建新的文件夹
			fileNew.mkdirs();
		}

		//数据库保存地址
		String dataBasePath = path+"/"+newFileName;
		targetPath +="/"+dataBasePath;

		File targetFile = new File(targetPath);
		try {
			//保存文件
			//使用此方法保存必须要绝对路径且文件夹必须已存在,否则报错
			file.transferTo(targetFile);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return config.getPath()+""+dataBasePath;
	}

	/**
	 * 需要保存的文件地址和文件
	 * @param path 传入的地址名称,例如,会员模块,传入的地址是member,也可以是member/2017/这样的多重文件夹
	 * @param file
	 * @return  地址字符串,注意,如果返回的是空,则说明没有选择上传文件
	 * @throws IOException
	 * @throws IllegalStateException
	 */
	public String saveFiletwo(String path, MultipartFile file) throws IOException {
		//原文件名
		String oriFileName = file.getOriginalFilename();
		if(Tools.isEmpty(oriFileName)){
			return null ;
		}
		//得到后缀
		String hz = oriFileName.substring(oriFileName.lastIndexOf("."));
		//新文件名
		String newFileName = Tools.getTimeStamp()+"_"+Tools.getRandomString(8)+""+".jpg";

		//存储的目标地址
		String targetPath = config.getDir() ;
		//如果配置的文件为空
		if(Tools.isEmpty(targetPath)){
			return "未配置文件存储文件夹";
		}
		//加上月份
		path = path+"/"+sdf.format(new Date());
		//创建新的文件夹
		File fileNew=new File(targetPath+path);
		if(!fileNew.exists()){
			fileNew.mkdirs();
		}
		//需要删除的图片
		//数据库保存地址
		String dataBasePath = path+"//"+newFileName;
		targetPath +="/"+dataBasePath;


		//准备上传服务器的

		File targetFile = new File(targetPath);
		//解压后的图片
		//保存文件
		//使用此方法保存必须要绝对路径且文件夹必须已存在,否则报错
		//已上传到本地
		file.transferTo(targetFile);
		long size = file.getSize()/1024;
			//判断文件大小对图片质量进行压缩,尺寸不变，范围0.01~1.0,值越低压缩效率越高。图片低于600K不进行压缩
			if(size>=4096&&size<7380){
				Thumbnails.of(targetFile).scale(1f).outputQuality(0.1f).outputFormat("jpg").toFile(targetFile);
			}else if(size>=1024&&size<4096){
				Thumbnails.of(targetFile).scale(1f).outputQuality(0.07f).outputFormat("jpg").toFile(targetFile);
			}else if(size>=350&&size<1024){
				Thumbnails.of(targetFile).scale(1f).outputQuality(0.1f).outputFormat("jpg").toFile(targetFile);
			}
		return config.getPath()+""+dataBasePath;
	}



/*	public static void zoomImage(String srcFileName,String path,int width,int height){
		try {
			BufferedImage bi = ImageIO.read(new File(srcFileName));
			BufferedImage tag=new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
			tag.getGraphics().drawImage(bi, 0, 0, width, height, null);
			ImageIO.write(tag, "jpg", new File(path));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}*/
	public static void main(String[] args) throws IOException {
		Jedis jedis=new Jedis("39.100.80.177", 6379);
		System.out.println("jedis = " + jedis.ping());
		//释放资源
		jedis.close();

	}
}
